// #include <cstring>
// #include <iostream>
// #include <string>
// using namespace std;
//
// // 数据成员做了内存申请的时候 有通过对象去创建另一个对象的时候
// //深拷贝 就是在构造拷贝函数中重新做了内存申请
// //浅拷贝 默认拷贝构造和简单赋值运算都是浅拷贝
//
// class MM {
//     public:
//     MM(const char* str) {
//         length = strlen(str)+1;
//         p_str = new char[length];
//         strcpy(p_str, str);
//     }
//     MM(const MM& rhs) {
//         //浅拷贝
//        // p_str = rhs.p_str;
//         //深拷贝
//         p_str = new char[rhs.length];
//         strcpy(p_str, rhs.p_str);
//         length = rhs.length;
//     }
//
//     void print() {
//         cout << p_str << endl;
//     }
//     ~MM() {
//         if (p_str) {
//             delete[] p_str;
//             p_str = NULL;
//         }
//     }
// protected:
//     char* p_str;
//     int length;
// private:
// };
//
// int main() {
//     MM obj("xiaofang");
//     MM obj2(obj);
//
//     return 0;
// }